「verilog 不可合成」的推薦目錄:
- 關於verilog 不可合成 在 コバにゃんチャンネル Youtube 的最佳貼文
- 關於verilog 不可合成 在 大象中醫 Youtube 的精選貼文
- 關於verilog 不可合成 在 大象中醫 Youtube 的最佳解答
- 關於verilog 不可合成 在 [問題] verilog 合成問題- 看板Electronics - 批踢踢實業坊 的評價
- 關於verilog 不可合成 在 verilog for loop合成2022-在Mobile01/PTT/Yahoo上的房地產 ... 的評價
- 關於verilog 不可合成 在 verilog for loop合成2022-在Mobile01/PTT/Yahoo上的房地產 ... 的評價
- 關於verilog 不可合成 在 verilog 文档整理 - GitHub 的評價
- 關於verilog 不可合成 在 verilog case語法的問題包括PTT、Dcard、Mobile01 的評價
- 關於verilog 不可合成 在 verilog case語法的問題包括PTT、Dcard、Mobile01 的評價
- 關於verilog 不可合成 在 verilog case語法的問題包括PTT、Dcard、Mobile01 的評價
- 關於verilog 不可合成 在 程式人| 介紹一個可編輯、保存、模擬、合成各種SystemVerilog ... 的評價
verilog 不可合成 在 大象中醫 Youtube 的精選貼文
verilog 不可合成 在 大象中醫 Youtube 的最佳解答
verilog 不可合成 在 verilog for loop合成2022-在Mobile01/PTT/Yahoo上的房地產 ... 的推薦與評價
verilog for loop合成2022-在Mobile01/PTT/Yahoo上的房地產討論內容懶人包,找Verilog for 迴圈,Verilog for loop ... [問題求助] Verilog用for語法寫合成,不可行嗎? ... <看更多>
verilog 不可合成 在 verilog for loop合成2022-在Mobile01/PTT/Yahoo上的房地產 ... 的推薦與評價
verilog for loop合成2022-在Mobile01/PTT/Yahoo上的房地產討論內容懶人包,找Verilog for 迴圈,Verilog for loop ... [問題求助] Verilog用for語法寫合成,不可行嗎? ... <看更多>
verilog 不可合成 在 [問題] verilog 合成問題- 看板Electronics - 批踢踢實業坊 的推薦與評價
各位前輩好,雖然我已經寫了 verilog 幾個學期了,但是以前都是用 modelsim 跑測資
檔。殊不知,這學期開始要用 quartus ii 合成,才發現原來我一直都是帶著錯誤觀念寫
錯的程式。
目前我遇到的問題是,在 modelsim 能編譯過,而且測資檔也能過。拿到 quartus 合成
的時候,也成功,但是噴一堆警告。然後如果不理會警告,把生成的 .vo 和 .sdo 再那
去 modelsim 跑測資發現輸出都是 xxxxxx。所以我想應該是合成出錯的東西了。
希望各位前輩如果有空的話,稍微幫我看一下我的 verilog 哪裡有嚴重的疏失。以下是
8 bit 的無號除法器,用組合電路寫的。(附上排版比較好的連結
https://ideone.com/PITrCL)
程式碼:
`timescale 1ns / 10ps
module div(out, in1, in2, dbz); parameter width = 8;
input [width-1:0] in1; // Dividend
input [width-1:0] in2; // Divisor
output reg [width-1:0] out; // Quotient
output reg dbz;
reg [3:0] it;
reg [width * 2 - 1:0] dividen;
reg [width * 2 - 1:0] diviser[8:0];
reg [width - 1:0] q;
reg res1, res2, res3;
initial begin
res1 = 0;
res2 = 0;
res3 = 0;
it = 0;
end always@(in1 or in2)begin
if(!{in2,{width{1'b0}}})begin
dbz = 1;
end else if(!{{width{1'b0}},in1}) begin
dbz = 0;
end else begin
dbz = 0;
res1 = ~res1;
end
end
always@(res3 or res1)begin
if(it == 0)begin
diviser[0] = {in2,{width{1'b0}}};
dividen = {{width{1'b0}},in1};
end else begin
diviser[0] = diviser[0];
dividen = dividen;
end if(it < 9)begin
if(!dividen && !it)begin
out = 0;
end else if(dividen >= diviser[it])begin
dividen = dividen - diviser[it];
q[width - it] = 1;
diviser[it + 1] = diviser[it]>>1;
res2 = ~res2;
end else begin q[width - it] = 0;
diviser[it + 1] = diviser[it]>>1;
res2 = ~res2;
end end else begin out = q;
res2 = ~res2;
end
end
always@(res2)begin
#1 if(it==9)begin it = 0;
res3 = res3;
end else begin
it = it + 1'b1;
res3 = ~res3;
end end endmodule
演算法主要是除數和被除數相比,來決定商是0或1,每次商左移一格,除數右移一格。It
紀錄移動的次數,最多八次。
稍後我在留言附上我在 quartus 合成的警告,我有查過相似的狀況,但改了之後警告都
沒少。
我嘗試過的改動:
1. if else 沒寫滿,可能產生 latch
2. if 出現的變數在 else 也要出現
現在這裡謝謝各位的幫忙。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.116.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1585848827.A.307.html
※ 編輯: eecheng87 (218.164.116.170 臺灣), 04/03/2020 01:37:06
... <看更多>